-
Notifications
You must be signed in to change notification settings - Fork 2.8k
send errors to pending requests if server closes #333
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for addressing this issue - it will improve the reliability of the Python SDK.
One small improvement is needed: after sending errors and closing the streams, we should clear the _response_streams dictionary to prevent keeping references to closed streams.
# Current implementation in the PR:
for id, stream in self._response_streams.items():
error = ErrorData(code=CONNECTION_CLOSED, message="Connection closed")
await stream.send(JSONRPCError(jsonrpc="2.0", id=id, error=error))
await stream.aclose()
# Suggested implementation:
for id, stream in self._response_streams.items():
error = ErrorData(code=CONNECTION_CLOSED, message="Connection closed")
await stream.send(JSONRPCError(jsonrpc="2.0", id=id, error=error))
await stream.aclose()
self._response_streams.clear() This matches the existing pattern in the codebase where self._response_streams.pop(request_id, None) is used to remove individual streams after use.
With this small change, the PR should be ready to merge.
ihrpr
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!!
Would be great to add
self._response_streams.clear()
before merging.
…l#333) Co-authored-by: ihrpr <[email protected]>
Motivation and Context
Fixes #332
The client blocks indefinitely if the server streams close before responding to a pending request.
How Has This Been Tested?
Added a test. Without this fix, the test fails because the request blocks forever.
Breaking Changes
No
Types of changes
Checklist